package main

import (
	"fmt"
	"sync"
)

var wg sync.WaitGroup

// 读写锁
var rwMutex sync.RWMutex

func read() {
	rwMutex.RLock() // 如果只是读数据，那么这个锁不产生影响，但是如果有写操作，那么读锁会等待写锁释放
	fmt.Println("读操作")
	rwMutex.RUnlock()
	wg.Done()
}

func write() {
	rwMutex.Lock()
	fmt.Println("写操作")
	rwMutex.Unlock()
	wg.Done()
}

func main() { //主线程
	wg.Add(1) //计数牌加1
	for i := 0; i < 10; i++ {
		go read() //开启一个协程
	}

	for i := 0; i < 2; i++ {
		go write() //开启一个协程
	}
}
